﻿namespace Mosquito.ViewModel.Collections.Tree {
    using System.Collections;
    using System.Collections.Generic;

    public interface ITree<TKey, TKeyPart, TValue, TNode> : 
        ILeaf<TKey, TValue>,
        INode<TKeyPart, TNode>
        where TNode : INode<TKeyPart, TNode>
    {
        TNode Parent { get; }
    }

    //public class Foo : ITree<string, string, string, Foo>, IDictionary<string, Foo> {
    //    public Foo Parent { get; private set; }

    //    public string FullKey { get; private set; }

    //    public string RelativeKey { get; private set; }

    //    public string Value { get; set; }

    //    public bool HasItem { get; private set; }

    //    public IEnumerable<Foo> Descendants { get; private set; }

    //    public IEnumerable<Foo> ImmediateChildren { get; private set; }

    //    public bool HasChildren { get; private set; }

    //    public int Count { get; private set; }

    //    public ICollection<string> Keys { get; private set; }

    //    public ICollection<Foo> Values { get; private set; }

    //    bool ICollection<KeyValuePair<string, Foo>>.IsReadOnly { get { return false; } }

    //    public Foo this[string key] {
    //        get {
    //            throw new System.NotImplementedException();
    //        }

    //        set {
    //            throw new System.NotImplementedException();
    //        }
    //    }

    //    public IEnumerator<Foo> GetEnumerator() {
    //        throw new System.NotImplementedException();
    //    }

    //    public void Add(KeyValuePair<string, Foo> item) {
    //        throw new System.NotImplementedException();
    //    }

    //    public void Clear() {
    //        throw new System.NotImplementedException();
    //    }

    //    public bool Contains(KeyValuePair<string, Foo> item) {
    //        throw new System.NotImplementedException();
    //    }

    //    public void CopyTo(KeyValuePair<string, Foo>[] array, int arrayIndex) {
    //        throw new System.NotImplementedException();
    //    }

    //    public bool Remove(KeyValuePair<string, Foo> item) {
    //        throw new System.NotImplementedException();
    //    }

    //    public bool ContainsKey(string key) {
    //        throw new System.NotImplementedException();
    //    }

    //    public void Add(string key, Foo value) {
    //        throw new System.NotImplementedException();
    //    }

    //    public bool Remove(string key) {
    //        throw new System.NotImplementedException();
    //    }

    //    public bool TryGetValue(string key, out Foo value) {
    //        throw new System.NotImplementedException();
    //    }

    //    IEnumerator<KeyValuePair<string, Foo>> IEnumerable<KeyValuePair<string, Foo>>.GetEnumerator() {
    //        throw new System.NotImplementedException();
    //    }

    //    IEnumerator IEnumerable.GetEnumerator() {
    //        return this.GetEnumerator();
    //    }
    //}
}
